Deavmi's coding shack
main.go master (47f33d26) Text, 4.03 KB
Tff7b72package Te6edf3main
Tff7b72import Tb4b4b4(
Ta5d6ff"bytes"
Ta5d6ff"fmt"
Te6edf3filesystems Ta5d6ff"io/fs"
Ta5d6ff"os"
Ta5d6ff"strings"
Ta5d6ff"new.git.deavmi.assigned.network/deavmi/glog.git/std/consts"
Te6edf3stdlogger Ta5d6ff"new.git.deavmi.assigned.network/deavmi/glog.git/std/logger"
Ta5d6ff"new.git.deavmi.assigned.network/deavmi/go-niknaks.git/types"
Te6edf3ini Ta5d6ff"new.git.deavmi.assigned.network/deavmi/ini.git"
Tb4b4b4)
Tff7b72var Te6edf3l Tff7b72*Te6edf3stdloggerTb4b4b4.Te6edf3StdLogger Tff7b72= Te6edf3setupTb4b4b4(Tb4b4b4)
Tff7b72func Te6edf3setupTb4b4b4(Tb4b4b4) Tff7b72*Te6edf3stdloggerTb4b4b4.Te6edf3StdLogger Tb4b4b4{
Tff7b72var Te6edf3stdLogger Tff7b72*Te6edf3stdloggerTb4b4b4.Te6edf3StdLogger Tff7b72= Te6edf3stdloggerTb4b4b4.Te6edf3NewStdLoggerTb4b4b4(Ta5d6ff"worcester"Tb4b4b4)
Te6edf3stdLoggerTb4b4b4.Te6edf3SetLevelTb4b4b4(Te6edf3constsTb4b4b4.Te6edf3LEVEL_TRACETb4b4b4)
Tff7b72return Te6edf3stdLogger
Tb4b4b4}
Tff7b72func Te6edf3mainTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3lTb4b4b4.Te6edf3TraceTb4b4b4(Ta5d6ff"entry point start"Tb4b4b4)
Tff7b72var Te6edf3m Tff7b72*Te6edf3Manager Tff7b72= Te6edf3NewManagerTb4b4b4(Tb4b4b4)
Tff7b72for Te6edf3_Tb4b4b4, Te6edf3fs_s Tff7b72:= Tff7b72range Te6edf3unitDirs Tb4b4b4{
Te6edf3fs Tff7b72:= Te6edf3osTb4b4b4.Te6edf3DirFSTb4b4b4(Te6edf3fs_sTb4b4b4)
Tff7b72var Te6edf3pickerClosure Tff7b72= Tff7b72funcTb4b4b4(Te6edf3p Tffa657stringTb4b4b4, Te6edf3d Te6edf3filesystemsTb4b4b4.Te6edf3DirEntryTb4b4b4, Te6edf3potE Tffa657errorTb4b4b4) Tffa657error Tb4b4b4{
Te6edf3lTb4b4b4.Te6edf3TraceTb4b4b4(Ta5d6ff"p: %v, d: %v, e: %v"Tb4b4b4, Te6edf3pTb4b4b4, Te6edf3dTb4b4b4, Te6edf3potETb4b4b4)
Te6edf3d_t Tff7b72:= Te6edf3dTb4b4b4.Te6edf3TypeTb4b4b4(Tb4b4b4)
Tff7b72if Tff7b72!Te6edf3d_tTb4b4b4.Te6edf3IsRegularTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3lTb4b4b4.Te6edf3TraceTb4b4b4(Ta5d6ff"Skipping non-file '%s'"Tb4b4b4, Te6edf3pTb4b4b4)
Tff7b72return Tff7b72nil
Tb4b4b4}
T8b949e// TODO: put into niknaks
Te6edf3cmps Tff7b72:= Te6edf3stringsTb4b4b4.Te6edf3SplitTb4b4b4(Te6edf3dTb4b4b4.Te6edf3NameTb4b4b4(Tb4b4b4)Tb4b4b4, Ta5d6ff"."Tb4b4b4)
Tff7b72if Tffa657lenTb4b4b4(Te6edf3cmpsTb4b4b4) Tff7b72== T79c0ff0 Tff7b72|| Te6edf3cmpsTb4b4b4[Tffa657lenTb4b4b4(Te6edf3cmpsTb4b4b4)Tff7b72-T79c0ff1Tb4b4b4] Tff7b72!= Ta5d6ff"service" Tb4b4b4{
Te6edf3lTb4b4b4.Te6edf3WarnTb4b4b4(Ta5d6ff"Skipping non-service file '%s'"Tb4b4b4, Te6edf3dTb4b4b4.Te6edf3NameTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72return Tff7b72nil
Tb4b4b4}
Tff7b72var Te6edf3fullPath Tffa657string Tff7b72= Te6edf3fs_s Tff7b72+ Ta5d6ff"/" Tff7b72+ Te6edf3p
Te6edf3lTb4b4b4.Te6edf3DebugTb4b4b4(Ta5d6ff"Full pth: %s"Tb4b4b4, Te6edf3fullPathTb4b4b4)
Te6edf3uTb4b4b4, Te6edf3e Tff7b72:= Te6edf3fileToUnitTb4b4b4(Te6edf3fullPathTb4b4b4)
Tff7b72if Te6edf3e Tff7b72!= Tff7b72nil Tb4b4b4{
Te6edf3lTb4b4b4.Te6edf3ErrorTb4b4b4(Ta5d6ff"Could not parse '%s': %v"Tb4b4b4, Te6edf3pTb4b4b4, Te6edf3eTb4b4b4)
Tff7b72return Tff7b72nil
Tb4b4b4}
T8b949e// push unit into manager
Te6edf3mTb4b4b4.Te6edf3LoadTb4b4b4(Te6edf3uTb4b4b4)
T8b949e// return fmt.Errorf("bruh")
Tff7b72return Tff7b72nil
Tb4b4b4}
Te6edf3e Tff7b72:= Te6edf3filesystemsTb4b4b4.Te6edf3WalkDirTb4b4b4(Te6edf3fsTb4b4b4, Ta5d6ff"."Tb4b4b4, Te6edf3pickerClosureTb4b4b4)
Tff7b72if Te6edf3e Tff7b72!= Tff7b72nil Tb4b4b4{
Te6edf3lTb4b4b4.Te6edf3ErrorTb4b4b4(Ta5d6ff"Error whilst scanning for unit files at search path '%v': %v"Tb4b4b4, Te6edf3fsTb4b4b4, Te6edf3eTb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tff7b72func Te6edf3fileToUnitTb4b4b4(Te6edf3p Tffa657stringTb4b4b4) Tb4b4b4(Te6edf3UnitTb4b4b4, Tffa657errorTb4b4b4) Tb4b4b4{
Te6edf3fTb4b4b4, Te6edf3e Tff7b72:= Te6edf3osTb4b4b4.Te6edf3OpenTb4b4b4(Te6edf3pTb4b4b4)
Tff7b72if Te6edf3e Tff7b72!= Tff7b72nil Tb4b4b4{
T8b949e// TODO: Place these errors higher up (in caller)
Tff7b72return Te6edf3typesTb4b4b4.Te6edf3ZeroTb4b4b4[Te6edf3UnitTb4b4b4]Tb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3fmtTb4b4b4.Te6edf3ErrorfTb4b4b4(Ta5d6ff"Error opening file '%s' for parsing: %v"Tb4b4b4, Te6edf3pTb4b4b4, Te6edf3eTb4b4b4)
Tb4b4b4}
Te6edf3f_sTb4b4b4, Te6edf3e Tff7b72:= Te6edf3fTb4b4b4.Te6edf3StatTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3e Tff7b72!= Tff7b72nil Tb4b4b4{
Tff7b72return Te6edf3typesTb4b4b4.Te6edf3ZeroTb4b4b4[Te6edf3UnitTb4b4b4]Tb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3fmtTb4b4b4.Te6edf3ErrorfTb4b4b4(Ta5d6ff"Error stat()'ing file '%s' for parsing: %v"Tb4b4b4, Te6edf3pTb4b4b4, Te6edf3eTb4b4b4)
Tb4b4b4}
T8b949e// TODO: If large file?
Tff7b72var Te6edf3dest Tb4b4b4[Tb4b4b4]Tffa657byte Tff7b72= Tffa657makeTb4b4b4(Tb4b4b4[Tb4b4b4]Tffa657byteTb4b4b4, Te6edf3f_sTb4b4b4.Te6edf3SizeTb4b4b4(Tb4b4b4)Tb4b4b4)
Te6edf3cTb4b4b4, Te6edf3e Tff7b72:= Te6edf3fTb4b4b4.Te6edf3ReadTb4b4b4(Te6edf3destTb4b4b4)
Tff7b72if Te6edf3e Tff7b72!= Tff7b72nil Tb4b4b4{
Tff7b72return Te6edf3typesTb4b4b4.Te6edf3ZeroTb4b4b4[Te6edf3UnitTb4b4b4]Tb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3fmtTb4b4b4.Te6edf3ErrorfTb4b4b4(Ta5d6ff"Error reading file '%s' for parsing: %v"Tb4b4b4, Te6edf3pTb4b4b4, Te6edf3eTb4b4b4)
Tb4b4b4}
Te6edf3c Tff7b72= Te6edf3c Tff7b72+ T79c0ff1 T8b949e// Rob Kike needs to really stfu with this language being so anal and all
T8b949e// parse the ini file
Te6edf3iniPTb4b4b4, Te6edf3e Tff7b72:= Te6edf3iniTb4b4b4.Te6edf3NewParserTb4b4b4(Te6edf3bytesTb4b4b4.Te6edf3NewReaderTb4b4b4(Te6edf3destTb4b4b4)Tb4b4b4)
Tff7b72if Te6edf3e Tff7b72!= Tff7b72nil Tb4b4b4{
Tff7b72return Te6edf3typesTb4b4b4.Te6edf3ZeroTb4b4b4[Te6edf3UnitTb4b4b4]Tb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3fmtTb4b4b4.Te6edf3ErrorfTb4b4b4(Ta5d6ff"There was an error initializing the INI parser: %v"Tb4b4b4, Te6edf3eTb4b4b4)
Tb4b4b4}
Te6edf3cfgTb4b4b4, Te6edf3e Tff7b72:= Te6edf3iniPTb4b4b4.Te6edf3ParseTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3e Tff7b72!= Tff7b72nil Tb4b4b4{
Tff7b72return Te6edf3typesTb4b4b4.Te6edf3ZeroTb4b4b4[Te6edf3UnitTb4b4b4]Tb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3fmtTb4b4b4.Te6edf3ErrorfTb4b4b4(Ta5d6ff"There was an error parsing the service file at '%s': %v"Tb4b4b4, Te6edf3pTb4b4b4, Te6edf3eTb4b4b4)
Tb4b4b4}
Te6edf3lTb4b4b4.Te6edf3InfoTb4b4b4(Ta5d6ff"Parsed '%s' to: %v"Tb4b4b4, Te6edf3pTb4b4b4, Te6edf3cfgTb4b4b4)
Te6edf3unitOutTb4b4b4, Te6edf3e Tff7b72:= Te6edf3configToUnitTb4b4b4(Te6edf3cfgTb4b4b4)
Tff7b72if Te6edf3e Tff7b72!= Tff7b72nil Tb4b4b4{
Tff7b72return Te6edf3typesTb4b4b4.Te6edf3ZeroTb4b4b4[Te6edf3UnitTb4b4b4]Tb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3e
Tb4b4b4}
Te6edf3lTb4b4b4.Te6edf3InfoTb4b4b4(Ta5d6ff"Parsed '%s' to unit descriptor: %v"Tb4b4b4, Te6edf3pTb4b4b4, Te6edf3unitOutTb4b4b4)
Te6edf3unitOutTb4b4b4.Te6edf3path Tff7b72= Te6edf3p T8b949e// set path
Tff7b72return Te6edf3unitOutTb4b4b4, Tff7b72nil
Tb4b4b4}
Tff7b72func Te6edf3configToUnitTb4b4b4(Te6edf3cfg Tff7b72*Te6edf3iniTb4b4b4.Te6edf3IniTb4b4b4) Tb4b4b4(Te6edf3UnitTb4b4b4, Tffa657errorTb4b4b4) Tb4b4b4{
T8b949e// [service] block
Te6edf3servBlockTb4b4b4, Te6edf3e Tff7b72:= Te6edf3cfgTb4b4b4.Te6edf3GetSectionTb4b4b4(Ta5d6ff"service"Tb4b4b4)
Tff7b72if Te6edf3e Tff7b72!= Tff7b72nil Tb4b4b4{
Tff7b72return Te6edf3typesTb4b4b4.Te6edf3ZeroTb4b4b4[Te6edf3UnitTb4b4b4]Tb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3e
Tb4b4b4}
Te6edf3lTb4b4b4.Te6edf3DebugTb4b4b4(Ta5d6ff"servBlock: %v"Tb4b4b4, Te6edf3servBlockTb4b4b4)
Tff7b72var Te6edf3u Te6edf3Unit Tff7b72= Te6edf3NewTb4b4b4(Ta5d6ff""Tb4b4b4)
T8b949e// required fields (name)
Te6edf3name_rTb4b4b4, Te6edf3e Tff7b72:= Te6edf3servBlockTb4b4b4.Te6edf3RecordAtTb4b4b4(Ta5d6ff"name"Tb4b4b4)
Tff7b72if Te6edf3e Tff7b72!= Tff7b72nil Tb4b4b4{
Tff7b72return Te6edf3typesTb4b4b4.Te6edf3ZeroTb4b4b4[Te6edf3UnitTb4b4b4]Tb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3e
Tb4b4b4}
Te6edf3uTb4b4b4.Te6edf3name Tff7b72= Te6edf3name_rTb4b4b4.Te6edf3ValueTb4b4b4(Tb4b4b4)
T8b949e// required fields (command)
Te6edf3command_rTb4b4b4, Te6edf3e Tff7b72:= Te6edf3servBlockTb4b4b4.Te6edf3RecordAtTb4b4b4(Ta5d6ff"command"Tb4b4b4)
Tff7b72if Te6edf3e Tff7b72!= Tff7b72nil Tb4b4b4{
Tff7b72return Te6edf3typesTb4b4b4.Te6edf3ZeroTb4b4b4[Te6edf3UnitTb4b4b4]Tb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3e
Tb4b4b4}
Te6edf3uTb4b4b4.Te6edf3command Tff7b72= Te6edf3command_rTb4b4b4.Te6edf3ValueTb4b4b4(Tb4b4b4)
Te6edf3lTb4b4b4.Te6edf3DebugTb4b4b4(Ta5d6ff"u.command: %v"Tb4b4b4, Te6edf3uTb4b4b4.Te6edf3commandTb4b4b4)
T8b949e// optional fields (uid and gid)
Tff7b72if Te6edf3uid_rTb4b4b4, Te6edf3e Tff7b72:= Te6edf3servBlockTb4b4b4.Te6edf3IntAtTb4b4b4(Ta5d6ff"uid"Tb4b4b4)Tb4b4b4; Te6edf3e Tff7b72== Tff7b72nil Tb4b4b4{
Te6edf3uTb4b4b4.Te6edf3uid Tff7b72= Te6edf3uid_r
Tb4b4b4}
Tff7b72if Te6edf3gid_rTb4b4b4, Te6edf3e Tff7b72:= Te6edf3servBlockTb4b4b4.Te6edf3IntAtTb4b4b4(Ta5d6ff"gid"Tb4b4b4)Tb4b4b4; Te6edf3e Tff7b72== Tff7b72nil Tb4b4b4{
Te6edf3uTb4b4b4.Te6edf3gid Tff7b72= Te6edf3gid_r
Tb4b4b4}
T8b949e// optional (depends)
Tff7b72if Te6edf3depends_rTb4b4b4, Te6edf3e Tff7b72:= Te6edf3servBlockTb4b4b4.Te6edf3RecordAtTb4b4b4(Ta5d6ff"depends"Tb4b4b4)Tb4b4b4; Te6edf3e Tff7b72== Tff7b72nil Tb4b4b4{
Tff7b72for Te6edf3_Tb4b4b4, Te6edf3dep_s Tff7b72:= Tff7b72range Te6edf3stringsTb4b4b4.Te6edf3SplitTb4b4b4(Te6edf3depends_rTb4b4b4.Te6edf3ValueTb4b4b4(Tb4b4b4)Tb4b4b4, Ta5d6ff","Tb4b4b4) Tb4b4b4{
Te6edf3uTb4b4b4.Te6edf3AddDepTb4b4b4(Te6edf3dep_sTb4b4b4)
Tb4b4b4}
Tb4b4b4}
T8b949e// optional [environments] section
Tff7b72if Te6edf3envBlockTb4b4b4, Te6edf3e Tff7b72:= Te6edf3cfgTb4b4b4.Te6edf3GetSectionTb4b4b4(Ta5d6ff"environment"Tb4b4b4)Tb4b4b4; Te6edf3e Tff7b72== Tff7b72nil Tb4b4b4{
Tff7b72for Te6edf3_Tb4b4b4, Te6edf3r Tff7b72:= Tff7b72range Te6edf3envBlockTb4b4b4.Te6edf3RecordsTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3uTb4b4b4.Te6edf3AddEnvTb4b4b4(Te6edf3rTb4b4b4.Te6edf3NameTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3rTb4b4b4.Te6edf3ValueTb4b4b4(Tb4b4b4)Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tff7b72return Te6edf3uTb4b4b4, Tff7b72nil
Tb4b4b4}
T8b949e// directories to scan for unit files when starting up
T8b949e// var unitDirs []string = []string{"/", "./examples"}
Tff7b72var Te6edf3unitDirs Tb4b4b4[Tb4b4b4]Tffa657string Tff7b72= Tb4b4b4[Tb4b4b4]Tffa657stringTb4b4b4{Ta5d6ff"./examples"Tb4b4b4}
Served by rngit 1.5.0 - Generated in 0.19s